home *** CD-ROM | disk | FTP | other *** search
/ Magnum One / Magnum One (Mid-American Digital) (Disc Manufacturing).iso / d12 / cgazv5n5.arc / LZW.H < prev    next >
C/C++ Source or Header  |  1991-09-23  |  2KB  |  73 lines

  1. /*--- LZW.H ------------------------------ Listing 1 ---
  2. * Contents:   Include file for LZW coding
  3. * Author:     Dwayne Phillips
  4. * Compilers:  Microsoft C 6.0a, BC++ 2.0
  5. * Date:       February 1991
  6. * May be used freely if authorship is acknowledged
  7. ------------------------------------------------------*/
  8.  
  9. #include <stdio.h>
  10. #include <stdlib.h>
  11. #include <string.h>
  12. #include <ctype.h>
  13.  
  14. /* buffer sizes for compression routines */
  15. #define IB_LENGTH_C   500
  16. #define OB_LENGTH_C   500
  17.  
  18. /* buffer sizes for decompression routines */
  19. #define IB_LENGTH_D   500
  20. #define OB_LENGTH_D   500
  21.  
  22. /* size of translation table */
  23. #define TABLE_SIZE 4096
  24. #define BASE_TABLE 255   /* these we initialize automatically */
  25.  
  26. /* LZW codes are stored in objects of this type */
  27. typedef short code_type;
  28.  
  29. /*
  30.     This struct is used to build the string table:
  31.  
  32.     num       - the code of the item in the table upon which
  33.                 this item is built.
  34.     character - the character appended onto the string in
  35.                 the table.
  36. */
  37.  
  38. typedef struct tag_table_item {
  39.    code_type num;
  40.    code_type chain;
  41.    int character;
  42. } table_item;
  43.  
  44. /* lzw1.c */
  45. void compression_routine(table_item *, FILE *, FILE *);
  46. void write_out_code(code_type, code_type *, unsigned *, FILE *);
  47. code_type wk_is_in_table(unsigned char *, int, table_item *);
  48. void put_wk_in_table(code_type, int,
  49.                      table_item *, unsigned *);
  50. void create_string(unsigned char *, int);
  51. void build_string(unsigned char *, code_type, table_item *);
  52. void append_char(unsigned char *, int);
  53. unsigned initialize(table_item *);
  54.  
  55. /* lzw2.c */
  56. void decompression_routine(table_item *, FILE *, FILE *);
  57. unsigned read_compressed_file(short *, FILE *);
  58. void update_table(int, unsigned char *, code_type *, 
  59.                     table_item *, unsigned *);
  60. void output_char(int, unsigned char *, unsigned *, FILE *);
  61.  
  62. /* lzw3.c */
  63.  
  64. unsigned my_read ( FILE *, void *, size_t, size_t );
  65. void my_write ( FILE *, void *, size_t, size_t );
  66.  
  67. #if defined(DEBUG)
  68. /* lzw-test.c */
  69. void print_string_table(table_item *, char *, int, int);
  70. #define SHOW(x) x
  71. #else
  72. #define SHOW(x)
  73. #endif